package com.sky.orders.service;

import com.sky.dto.*;
import com.sky.entity.Orders;
import com.sky.result.PageResult;
import com.sky.vo.OrderStatisticsVO;
import com.sky.vo.OrderVO;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 订单管理 service
 */
public interface OrderService {


    /**
     * 订单  分页-条件查询
     */
    PageResult queryPage(OrdersPageQueryDTO ordersPageQueryDTO);


    /**
     * 订单 根据订单id，查询订单和明细列表
     */
    OrderVO getOrderAndOrderDetailById(Long id);


    /**
     * 订单 统计订单订单状态为 status= 2待接单 3已接单 4派送中 5已完成 6已取消 数量
     */
    OrderStatisticsVO statusCounts();


    /**
     * 订单 接单(修改订单状态)
     */
    void receiveOrders(OrdersConfirmDTO ordersConfirmDTO);


    /**
     * 订单 拒单
     */
    void rejectionOrders(OrdersRejectionDTO ordersRejectionDTO);


    /**
     * 订单 商家取消订单
     */
    void merchantCancelOrder(OrdersCancelDTO ordersCancelDTO);


    /**
     * 订单 派送
     */
    void deliveryOrder(Long id);


    /**
     * 订单 完成送达
     */
    void completeOrder(Long id);


    /**
     * 定时任务
     * 查询订单状态status=1待支付、payStatus=0未支付、下单时间+15min < 当前时间 的订单集合
     */
    List<Orders> getTimeOutOrders(Integer status, Integer payStatus, Long orderTimeout);


    /**
     * 定时任务
     * 根据id 修改订单状态
     */
    void updateById(Orders updateOrder);


    /**
     * 定时任务
     * 根据状态status=4派送中，以及下单时间+2h < 当前时间 查询订单集合
     */
    List<Orders> getDeliveryOrders(Integer status, Integer deliveryTime);



    /**
     * 订单 查询当天营业总额 (状态已完成)
     */
    BigDecimal selectDayTotalAmountByMap(Map map);


    /**
     * 订单 数据统计
     */
    Integer getOrderStatisticsByMap(Map map);


    /**
     * 订单 热销商品统计
     */
    List<GoodsSalesDTO> selectSalesTop10Statistics(Map map);
}
